home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xsw / exits.c < prev    next >
C/C++ Source or Header  |  1995-05-09  |  5KB  |  179 lines

  1. /*
  2.  *    @(#) exits.c 12.1 95/05/09 SCOINC
  3.  */
  4. /***************************************************************************
  5.  *
  6.  *    Copyright (c) 1990-1993        The Santa Cruz Operation, Inc.
  7.  *
  8.  *    All rights reserved.  No part of this program or publication may be
  9.  *    reproduced, transmitted, transcribed, stored in a retrieval system,
  10.  *    or translated into any language or computer language, in any form or
  11.  *    by any means, electronic, mechanical, magnetic, optical, chemical,
  12.  *    biological, or otherwise, without the prior written permission of:
  13.  *
  14.  *        The Santa Cruz Operation , Inc.        (408) 425-7222
  15.  *        400 Encinal St., Santa Cruz, California 95060 USA
  16.  *
  17.  **************************************************************************/
  18. /*
  19.  *    SCCS Stuff
  20.  *
  21.  *    @(#) exits.c 12.1 95/05/09 SCOINC
  22.  *
  23.  * Moification History
  24.  *
  25.  # S002, 25-May-93, rickra
  26.  #     Added these includes:
  27.  *        #include <X11/Intrinsic.h>
  28.  *        #include "include/unixincs.h"
  29.  *        #include "include/buttons.h"    
  30.  *
  31.  # S001, 01-Jan-93, rickra
  32.  #     Added externs:
  33.  *        abort();
  34.  *        disp_msg();
  35.  *        exit();
  36.  *
  37.  # S000, 30-Sep-92, rickra
  38.  #     Change hard coded color referneces to user configurable.
  39.  */
  40. /*+-------------------------------------------------------------------------
  41.     exits.c - XSW exit processor
  42.     wht@n4hgf.Mt-Park.GA.US
  43.  
  44.   Defined functions:
  45.     adb_trap()
  46.     caught_signal(sig)
  47.     leave(exit_code)
  48.     leave_text(text,exit_code)
  49.     leaving()
  50.  
  51. --------------------------------------------------------------------------*/
  52. /*+:EDITS:*/
  53. /*:09-25-1990-19:48-wht@n4hgf-leaving() go bang if X not initialized */
  54. /*:09-25-1990-05:11-wht@n4hgf-release heh-heh x0.22 preliminary */
  55. /*:09-20-1990-00:09-wht@n4hgf-scales, sysinfo/minfo, bootinfo working */
  56. /*:09-15-1990-06:08-wht-creation */
  57.  
  58. #include <stdio.h>
  59. #include <signal.h>
  60. #include <X11/Intrinsic.h>
  61.  
  62. #include "include/unixincs.h"
  63. #include "include/buttons.h"
  64. #include "include/xsw.h"
  65.  
  66. extern void     abort ();
  67. extern void     disp_msg (unsigned long, char *);
  68. extern int      exit (int);
  69.  
  70.  
  71. /*+-------------------------------------------------------------------------
  72.     leaving() - perform leave() basic processing and return
  73. --------------------------------------------------------------------------*/
  74. void
  75. leaving ()
  76. {
  77.   if (window)
  78.     {
  79.       XDestroyWindow (display, window);
  80.       XCloseDisplay (display);
  81.     }
  82. }                /* end of leaving */
  83.  
  84. /*+-------------------------------------------------------------------------
  85.     leave(exit_code) - leave program with exit code
  86. --------------------------------------------------------------------------*/
  87. void
  88. leave (exit_code)
  89.      int             exit_code;
  90. {
  91.   leaving ();
  92. #ifdef TESTING
  93.   gct_writelog ("xswLOG");
  94. #endif
  95.   exit (exit_code);
  96. }                /* end of leave */
  97.  
  98. /*+-------------------------------------------------------------------------
  99.     leave_text(text,exit_code) - leave program with message and exit code
  100. If exit_code == 255, do wperror
  101. --------------------------------------------------------------------------*/
  102. void
  103. leave_text (text, exit_code)
  104.      char           *text;
  105.      int             exit_code;
  106. {
  107.   fputs ("\nxsw: ", stdout);
  108.  
  109.   if (text && *text)
  110.     {
  111.       if (window)
  112.     disp_msg (colorDisplayMsg.pixel, text);
  113.       fputs (text, stdout);
  114.       fputs ("\n", stdout);
  115.     }
  116.  
  117.   if (exit_code == 255)
  118.     {
  119.       extern int      errno;
  120.       extern int      sys_nerr;
  121.       extern char    *sys_errlist[];
  122.  
  123.       if (errno < sys_nerr)
  124.     printf ("system-provided error status: %s\n", sys_errlist[errno]);
  125.     }
  126.  
  127.   leave (exit_code);
  128.  
  129. }                /* end of leave_text */
  130.  
  131. /*+-------------------------------------------------------------------------
  132.     adb_trap() - convenient trap for catching abort
  133.  
  134.   Get a look at stack before abort() botches it
  135. --------------------------------------------------------------------------*/
  136. #if defined(ADB_DEBUG)
  137. void
  138. adb_trap ()
  139. {
  140.   printf ("too bad .... goodbye\n");
  141. }                /* end of adb_trap */
  142.  
  143. #endif
  144.  
  145. /*+-------------------------------------------------------------------------
  146.     caught_signal(sig) - SIGHUP thru SIGSYS: leave with possible abort
  147. --------------------------------------------------------------------------*/
  148. void
  149. caught_signal (sig)
  150.      int             sig;
  151. {
  152.   leaving ();
  153.   switch (sig)
  154.     {
  155.     case SIGQUIT:
  156.     case SIGILL:
  157.     case SIGTRAP:
  158.     case SIGIOT:
  159.     case SIGEMT:
  160.     case SIGFPE:
  161.     case SIGBUS:
  162.     case SIGSEGV:
  163.     case SIGSYS:
  164. #if defined(ADB_DEBUG)
  165.       adb_trap ();        /* if debugging, stop at convenient
  166.                  * breakpoint */
  167. #endif
  168.       abort ();
  169.     }
  170. #ifdef TESTING
  171.   gct_writelog ("xswLOG");
  172. #endif
  173.  
  174.   exit (128 + sig);
  175. }                /* end of caught_signal */
  176.  
  177. /* vi: set tabstop=4 shiftwidth=4: */
  178. /* end of exits.c */
  179.